/* 
 * File:   Bullet.cpp
 * Author: mauro
 * 
 * Created on 18 de noviembre de 2014, 18:39
 */

#include "Bullet.h"

Bullet::Bullet() {
    this->cantidadEnviada = 0;
    this->cantidadEnviadaOld = 0;
}

//contacto de una bala con otros cuerpos.

bool Bullet::inConctacFloor() {
    b2Body* body = this->circle->getObject()->getBody();

    for (b2ContactEdge* contList = body->GetContactList(); contList; contList = contList->next) {
        b2Contact* cont = contList->contact;
        b2Fixture* fixtA = cont->GetFixtureA();
        b2Fixture* fixtB = cont->GetFixtureB();
        void* dataVoidA = fixtA->GetUserData();
        int data = *((int*) &dataVoidA);
        if (data == IS_FLOOR) { //contacto con el piso
            this->contacFloor = true;
        }
        void* dataVoidB = fixtB->GetUserData();
        data = *((int*) &dataVoidB);
        if (data == IS_FLOOR) { //contacto con el piso        
            this->contacFloor = true;
        }
    }
    return this->contacFloor;
}

bool Bullet::inConctacEnemy() {
    b2Body* body = this->circle->getObject()->getBody();
    for (b2ContactEdge* contList = body->GetContactList(); contList; contList = contList->next) {
        b2Contact* cont = contList->contact;
        b2Fixture* fixtA = cont->GetFixtureA();
        b2Fixture* fixtB = cont->GetFixtureB();
        void* dataVoidA = fixtA->GetUserData();
        int data = *((int*) &dataVoidA);
        if (data == IS_ENEMY) { //contacto con el piso o un enemig            
            this->contacBullet = true;
        }
        void* dataVoidB = fixtB->GetUserData();
        data = *((int*) &dataVoidB);
        if (data == IS_ENEMY) { //contacto con un enemigo
            this->contacBullet = true;            
        }
    }
    return this->contacBullet;
}

bool Bullet::inConctacBonus() {
    b2Body* body = this->circle->getObject()->getBody();
    for (b2ContactEdge* contList = body->GetContactList(); contList; contList = contList->next) {
        b2Contact* cont = contList->contact;
        b2Fixture* fixtA = cont->GetFixtureA();
        b2Fixture* fixtB = cont->GetFixtureB();
        void* dataVoidA = fixtA->GetUserData();
        int data = *((int*) &dataVoidA);
        if (data == IS_BONUS_LIFE || data == IS_BONUS_FLASH) { //contacto con el piso o un enemig            
            this->contacBullet = true;
        }
        void* dataVoidB = fixtB->GetUserData();
        data = *((int*) &dataVoidB);
        if (data == IS_BONUS_LIFE || data == IS_BONUS_FLASH) { //contacto con un enemigo
            this->contacBullet = true;            
        }
    }
    return this->contacBullet;
}
bool Bullet::inConctacBoss(){
    b2Body* body = this->circle->getObject()->getBody();
    for (b2ContactEdge* contList = body->GetContactList(); contList; contList = contList->next) {
        b2Contact* cont = contList->contact;
        b2Fixture* fixtA = cont->GetFixtureA();
        b2Fixture* fixtB = cont->GetFixtureB();
        void* dataVoidA = fixtA->GetUserData();
        int data = *((int*) &dataVoidA);
        if (data == THE_BOSS ) { //contacto con el piso o un enemig            
            this->contacBullet = true;
        }
        void* dataVoidB = fixtB->GetUserData();
        data = *((int*) &dataVoidB);
        if (data == THE_BOSS ) { //contacto con un enemigo
            this->contacBullet = true;            
        }
    }
    return this->contacBullet;

}

Circle *Bullet::getShape() {    
    return this->circle;
}
void Bullet::setStat(int stat) {
    if (stat == BULLET_DEAD) {        
        this->circle->setStat(1);
    }
    if (stat == 2) {        
        this->circle->setStat(2);
    }
}
int Bullet::getCantidadDeEnvios(){
    return this->cantidadEnviada;
}
int Bullet::getCantidadDeEnviadosOld(){
    return this->cantidadEnviadaOld;
}

void Bullet::incrementarEnvioOld(){    
    this->cantidadEnviadaOld++;
}
void Bullet::incrementarEnvio(){
    this->cantidadEnviada++;
}
Bullet::~Bullet() {
}

